export default {
  /**
   *总体检测结果，在某个阶段代表某个阶段的检测结果
   */
  result: true,
  /**
   * 总体检测消息，在某个阶段代表某个阶段的检测消息
   */
  message: null,
  /**
   * 传入的检测对象，也就是日期字符串
   */
  dateString: null,
  /**
   * 校验是否为日期的正则表达式
   * (\d{4})：前四位都是必须是数字
   * [-/]：支持 - 和 / 分隔符
   * (\d{2})：中间两位必须是数字
   * [-/]：支持 - 和 / 分隔符
   * (\d{2})：最后两位必须是数字
   * | 或者
   * (\d{8})：8位都必须是数字
   * $：结束符
   */
  regularString: /^(\d{4})[-/](\d{2})[-/](\d{2})|(\d{8})$/,
  /**
   * 正常标准日期校验（不包括8位数字日期）
   */
  standardDate: /^(\d{4})[-/](\d{2})[-/](\d{2})$/,
  /**
   * 档案标准8位日期格式
   */
  standard8Length: /^(\d{8})$/,
  /**
   *  19位日期 2023-04-03 00:00:00 | 2023/04/03 00:00:00
   */
  standard19Length: /^(\d{4})[-/](\d{2})[-/](\d{2})[ ](\d{2})[:](\d{2})[:](\d{2})$/,
  /**
   * 重置方法状态
   */
  resetState() {
    this.result = true;
    this.message = null;
  },
  /**
   * 校验函数的整体调用方法
   */
  checkValue() {
    // 重置状态变量为正常状态
    this.resetState();
    if (this.dateString) {
      this.checkDateType()
        .then(() => {
          return this.checkMaxLength();
        })
        .then(() => {
          return this.checkMinLength(8);
        })
        .catch((error) => {
          this.message = error;
          console.log(error);
        });
    }

  },
  /**
   * 校验手动输入的日期字符串长度是否符合要求
   * 日期格式仅支持 20230310 2023-03-10 2023/03/10
   * 长度最长为 10 位
   * ----------------------------------------
   * 新增需求，需要使用时分秒三个时间位代表年月日是否为合法值
   * 长度修改为位 19（2023-04-03 00:00:00）
   * @returns
   */
  checkMaxLength(defaultLength) {
    return new Promise((resolve, reject) => {
      let lengthResult = this.dateString.length <= (defaultLength ? defaultLength : 19);
      if (!lengthResult) {
        this.result = false;
        this.message = "日期内容超出" + (defaultLength ? defaultLength : 10) + "位的定义";
        reject(this.message);
      }
      resolve();
    });
  },
  /**
   * 校验手动输入的日期字符串长度是否符合要求
   * 日期格式最小为 8 位数字
   * @param {number} defaultLength
   */
  checkMinLength(defaultLength) {
    return new Promise((resolve, reject) => {
      let lengthResult = this.dateString.length >= (defaultLength ? defaultLength : 8);
      if (!lengthResult) {
        this.result = false;
        this.message = "日期内容小于8位的定义";
        reject(this.message);
      }
      resolve();
    });
  },
  /**
   * 校验是否为日期格式，
   * 校验方式是：是否可以转换为日期对象
   */
  checkDateType() {
    return new Promise((resolve, reject) => {
      //  校验日期是否合法
      if (!this.regularString.test(this.dateString)) {
        this.result = false;
        this.message = "日期格式不正确";
        reject(this.message);
      }
      resolve();
    });
  }
};
